// 定义基础URL，用于构建完整的请求URL
const baseUrl = "https://pcapi-xiaotuxian-front-devtest.itheima.net";

// 抽离统一拦截器配置
const interceptor = {
  // 定义拦截器的invoke方法，该方法会在每个请求被发送之前执行
  invoke(args) {
    uni.showLoading({ title: "加载中" });
    // 检查请求的URL是否以'http'开头，若不是则表示该URL为相对路径
    if (!args.url.startsWith("http")) {
      // 将相对路径转换为完整的请求URL，使用基础URL拼接相对路径
      args.url = baseUrl + args.url;
    }

    // 这个项目独有的属性, 跟后端约定不同客户端请求数据带有不同的
    // source-clent 请求头, 后端可以自适应地返回对应数据(通常变化的是图片大小)
    args.header = {
      ...args.header, // 保留原本的 header
      "source-client": "miniapp", // 添加小程序端调用标识
    };
  },
  // 完成回调拦截
  complete(res) {
    uni.hideLoading();
  },
};
// 在uni对象上添加请求拦截器
uni.addInterceptor("request", interceptor);
uni.addInterceptor("uploadFile", interceptor);

// 对 request 进行封装
// 导出一个函数
// 可以按照要求调用 uni.request
// 如果是 401 报错, 自动退出到登录页
// 如果没问题, 就只返回 res.data 的数据即可

const http = async (options) => {
  // 使用uni.request发送http请求
  const res = await uni.request(options);

  // 判断请求状态码是否为200-300之间
  if (res.statusCode >= 200 && res.statusCode < 300) {
    // 返回请求结果
    return res.data;
  }

  // 判断请求状态码是否为401
  if (res.statusCode === 401) {
    // 切换到登录页面
    uni.navigateTo({ url: "/pages/login/index" });
    return;
  }
};

export default http;
